{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 题目1：\n",
    "对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。（10分）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"day.csv\")\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
      "  warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "sns.distplot(df[\"cnt\"], bins=30, kde=True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 说明1：\n",
    "使用seaborn的distplot方法对连续型特征进行分布可视化。上面将每天共享单车的骑行次数的频率分布使用直方图可视化了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题2：\n",
    "对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。（10分）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6274940090334918"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['cnt'].corr(df['temp'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 说明2：\n",
    "seriesA.corr(seriesB)即可计算A和B的相关性"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题3：\n",
    "如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。（10分）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       temp     atemp       hum  windspeed  casual  registered   cnt\n",
       "0  0.344167  0.363625  0.805833   0.160446     331         654   985\n",
       "1  0.363478  0.353739  0.696087   0.248539     131         670   801\n",
       "2  0.196364  0.189405  0.437273   0.248309     120        1229  1349\n",
       "3  0.200000  0.212122  0.590435   0.160296     108        1454  1562\n",
       "4  0.226957  0.229270  0.436957   0.186900      82        1518  1600"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cols = df.columns\n",
    "df0 = df[cols[-7:]]\n",
    "df0.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x21ca02cc630>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_corr = df0.corr().abs()\n",
    "sns.heatmap(data_corr,annot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = df0[\"cnt\"]\n",
    "\n",
    "X = df0.drop([\"cnt\"], axis = 1)\n",
    "\n",
    "feat_names = X.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(584, 6)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>registered</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>casual</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>temp</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>atemp</td>\n",
       "      <td>0.000007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>hum</td>\n",
       "      <td>-0.000005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>-0.000006</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns      coef\n",
       "5  registered  1.000000\n",
       "4      casual  1.000000\n",
       "0        temp  0.000008\n",
       "1       atemp  0.000007\n",
       "2         hum -0.000005\n",
       "3   windspeed -0.000006"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "ridge = Ridge()\n",
    "\n",
    "ridge.fit(X_train, y_train)\n",
    "\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 说明3：\n",
    "首先使用DataFrame.corr()计算相关性，如何有相关系数大于0.5的项，则表示有至少两个参数有较强相关性，此时使用岭回归Rigde，通过增加一个L2正则项可减小由强相关参数带来的方差变化的敏感性。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题4：\n",
    "当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 （10分），并重新训练最小二乘线性回归、岭回归、和Lasso模型（30分）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by MinMaxScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "log_y = np.log1p(y)\n",
    "\n",
    "mms_X = MinMaxScaler()\n",
    "mms_y = MinMaxScaler()\n",
    "mms_log_y = MinMaxScaler()\n",
    "\n",
    "X = mms_X.fit_transform(X)\n",
    "y = mms_y.fit_transform(y.values.reshape(-1, 1))\n",
    "log_y = mms_y.fit_transform(log_y.values.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "fe_data = pd.DataFrame(data = X, columns = feat_names, index = df.index)\n",
    "\n",
    "#加上标签y\n",
    "fe_data[\"cnt\"] = y\n",
    "fe_data[\"log_cnt\"] = log_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "      <th>log_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0.096538</td>\n",
       "      <td>0.091539</td>\n",
       "      <td>0.110792</td>\n",
       "      <td>0.632974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0.037852</td>\n",
       "      <td>0.093849</td>\n",
       "      <td>0.089623</td>\n",
       "      <td>0.598186</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0.034624</td>\n",
       "      <td>0.174560</td>\n",
       "      <td>0.152669</td>\n",
       "      <td>0.685894</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0.031103</td>\n",
       "      <td>0.207046</td>\n",
       "      <td>0.177174</td>\n",
       "      <td>0.710569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0.023474</td>\n",
       "      <td>0.216286</td>\n",
       "      <td>0.181546</td>\n",
       "      <td>0.714615</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       temp     atemp       hum  windspeed    casual  registered       cnt  \\\n",
       "0  0.355170  0.373517  0.828620   0.284606  0.096538    0.091539  0.110792   \n",
       "1  0.379232  0.360541  0.715771   0.466215  0.037852    0.093849  0.089623   \n",
       "2  0.171000  0.144830  0.449638   0.465740  0.034624    0.174560  0.152669   \n",
       "3  0.175530  0.174649  0.607131   0.284297  0.031103    0.207046  0.177174   \n",
       "4  0.209120  0.197158  0.449313   0.339143  0.023474    0.216286  0.181546   \n",
       "\n",
       "    log_cnt  \n",
       "0  0.632974  \n",
       "1  0.598186  \n",
       "2  0.685894  \n",
       "3  0.710569  \n",
       "4  0.714615  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fe_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>registered</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>casual</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>temp</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>atemp</td>\n",
       "      <td>0.000007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>hum</td>\n",
       "      <td>-0.000005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>-0.000006</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns      coef\n",
       "5  registered  1.000000\n",
       "4      casual  1.000000\n",
       "0        temp  0.000008\n",
       "1       atemp  0.000007\n",
       "2         hum -0.000005\n",
       "3   windspeed -0.000006"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression, LassoCV\n",
    "\n",
    "lr = LinearRegression()\n",
    "lasso = LassoCV()\n",
    "\n",
    "ridge.fit(X_train, y_train)\n",
    "lr.fit(X_train, y_train)\n",
    "lasso.fit(X_train, y_train)\n",
    "\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "fs_ridge = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((ridge.coef_.T))})\n",
    "fs_ridge.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>casual</td>\n",
       "      <td>1.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>registered</td>\n",
       "      <td>1.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>atemp</td>\n",
       "      <td>1.350807e-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>9.884641e-15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>hum</td>\n",
       "      <td>-7.979165e-13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>temp</td>\n",
       "      <td>-1.682668e-11</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns          coef\n",
       "4      casual  1.000000e+00\n",
       "5  registered  1.000000e+00\n",
       "1       atemp  1.350807e-11\n",
       "3   windspeed  9.884641e-15\n",
       "2         hum -7.979165e-13\n",
       "0        temp -1.682668e-11"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fs_lr = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((lr.coef_.T))})\n",
    "fs_lr.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>registered</td>\n",
       "      <td>0.999866</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>casual</td>\n",
       "      <td>0.993929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>temp</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>atemp</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>hum</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns      coef\n",
       "5  registered  0.999866\n",
       "4      casual  0.993929\n",
       "0        temp  0.000000\n",
       "1       atemp  0.000000\n",
       "2         hum -0.000000\n",
       "3   windspeed -0.000000"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fs_lasso = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((lasso.coef_.T))})\n",
    "fs_lasso.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题5：\n",
    "代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。（30分）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 说明5：\n",
    "当输入特征之间存在共线性时使用岭回归。\n",
    "当输入特征多，有些特征和目标变量之间相关性很弱时，想选择最明显的特征，使用Lasso。\n",
    "在没有异常值时使用最小二乘。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
